package com.gec.it.service;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Comment;
import org.activiti.engine.task.IdentityLink;
import org.activiti.engine.task.Task;

public interface ApproveService {
	public void deploy(String name, InputStream input);

	public List<Deployment> findDeploys();

	public void removeDeploy(String id);

	public ProcessInstance startWorkflow(String prokey, int bizkey, Map<String, Object> map);

	// 查询是否已经开启过
	public HistoricProcessInstance findHisProcByBizkey(String prockey, String bizkey);

	// 根据流程key值和绑定的业务key值，查找流程图，用于显示流程图
	InputStream findImageInputStreamByBizkey(String processDefineKey, String bizkey);

	public InputStream findImageInputStream(String deploymentId, String imageName);

	ProcessInstance findProcessInstanceByBizkey(String processDefineKey, String bizkey);

	public List<Map<String, Object>> findCoordingByBizkey(String processDefineKey, String bizkey);
	//查找用户应该处理的任务（包含各种流程图的）
	List<Task> findTaskListByName(String userkey);
	//查找用户应该处理的任务（制定流程图的）
	List<Task> findTaskListByName(String prockey, String userkey);
	//根据任务把业务id找出来
	public String findBizkeyByTask(Task t);
	//查找组任务（不区分流程图）
	public List<Task> findGroupTaskListByName(String processDefineKey,String userkey);
	//查找组任务（区分流程图）
	public List<Task> findGroupTaskListByName(String userkey);
	//根据任务查询组查询任务成员
	List<IdentityLink> findGroupUsers(String taskid);
	//根据任务查询组任务成员名字
	List<String> findGroupUsersKey(String taskid);
	//返回流程出口连线的名称，我们控制按钮的名称
	List<String> findOutComeListByTaskId(String taskId);
	//根据id查询task对象
	public Task findTaskById(String taskid);
	// 领取任务，将组任务领取为个人任务
	void Group2User(String taskid, String currentuser);
	// 结束一个任务，包括领取组任务，添加批注信息，结束任务，返回下一个任务
	Task saveSubmitTask(String taskId, String currentuser, String message, Map<String, Object> variables);
	//根据流程实例id查找当前正在执行的任务
	Task findTaskByProcessInstId(String processInstid);
	public boolean isGroupUser(String taskId);
	public boolean isGroupUser(Task task);
	//根据流程id查找批注
	List<Comment> findComment(String procInsId);
	//根据任务查找批注
	List<Comment> findCommentByTask(Task task);
	//根据任务id查找批注
	List<Comment> findCommentByTask(String taskId);
	//根据业务id查找批注
	public List<Comment> findCommentByBizkey(String procDefkey,String bizkey);
	//取消领取任务，将个人任务撤回组任务
	void User2Group(String taskid, String currentuser);
	//根据流程图key+业务id查找批注，取消审批流程
	public void cancelByBizkey(String processDefineKey,String bizkey);
}
